#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "engine.h"
#include "debug.h"
#include "genericobject.h"
#include "tableinfo.h"
#include "rowinfo.h"

static int append_to_pessoas(int id, char name[100], table_info_t *table_pessoas)
{
    generic_object_t *row = NULL;

    row = new_test_row(id, name, table_pessoas->column_list);
    
    append_to_file(table_pessoas, row);

    dispose_object_list(&row);

    return SUCCESS;
}

static ddl_column_t *generate_ddl_list()
{
    ddl_column_t *column_list = NULL;

    if (!column_list_add(&column_list, new_ddl_column("id", Int, 0, IsPrimaryIndex)))
    {
    	return NULL;
    }

    if (!column_list_add(&column_list, new_ddl_column("name", Char, 100, IsNotPrimaryIndex)))
    {
    	return NULL;
    }

    return column_list;
}

static table_info_t *create_table_pessoas()
{
	table_info_t *table_pessoas;
	table_pessoas = new_table_info("PESSOAS");
	table_pessoas->column_list = generate_ddl_list();
	if (!create_table(table_pessoas))
	{
		dispose_table_info(&table_pessoas);
	}

	return table_pessoas;
}
 
int main()
{
    table_info_t *table_pessoas = NULL;
    row_info_t *cursor = NULL;
    ddl_column_t *column_cursor = NULL;
    int cnt = 1;

    table_pessoas = create_table_pessoas();
    dispose_table_info(&table_pessoas);

    table_pessoas = load_table_info("PESSOAS");
    if (table_pessoas == NULL)
    {
        return FAILURE;
    }

    if (!append_to_pessoas(1, "Eduardo", table_pessoas)) return 1;
    if (!append_to_pessoas(2, "Henrique", table_pessoas)) return 1;
    if (!append_to_pessoas(3, "Leite", table_pessoas)) return 1;

    cursor = read_table(table_pessoas);
   
    /*debug("Reading file using generic method");
    read_generic();*/

    while (cursor != NULL)
    {
    	column_cursor = cursor->data->column;

    	printf("Reading line %i\n", cnt);

    	while (column_cursor != NULL)
    	{
			switch (column_cursor->type)
			{
			case Int:
				printf("%s: %i\n", column_cursor->name,
						get_object_value_int(object_from_column(cursor->data, column_cursor)));
				break;
			case Char:
				printf("%s: %s\n", column_cursor->name,
						get_object_value_char(object_from_column(cursor->data, column_cursor)));
				break;
			}

			column_cursor = column_cursor->next;
    	}

    	cnt++;
    	cursor = cursor->next;
    }

    dispose_table_info(&table_pessoas);
        
    getchar();
    return 0;
}

